// Copyright 2006 Bret Taylor
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.

#include "parser.h"

#include "ast.h"
#include "filelocation.h"
#include "yaccparser.h"

using namespace std;

// Global functions from our yacc parse and lex scanner
void InitializeScanner(const indie::FileLocationFactory& factory,
		       indie::Log& log, istream& stream);
void InitializeParser(const indie::FileLocationFactory& factory,
		      indie::Log& log, indie::AstFile** result);
int yyparse();

namespace indie {

Parser::Parser(Log& log) : log_(log) {
}

Parser::~Parser() {
}

AstFile* Parser::Parse(const string& path, istream& stream) {
    AstFile* result = NULL;
    FileLocationFactory factory(path);
    InitializeScanner(factory, log_, stream);
    InitializeParser(factory, log_, &result);
    yyparse();
    return result;
}

}
